package alkuperainen;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

public class Tapahtuma implements Comparable<Tapahtuma>, java.io.Serializable{
	public static final int LUENTO =1;
	public static final int HARJOITUS =2;
	public static final int TENTTI =3;
	public static final int OPINTOPIIRI =4;
	public static final int MUU =5;
	
	private String nimi;
	private String paikka;
	private int tyyppi;
	//private int kellonaika;
	private GregorianCalendar alkupaiva;
	private GregorianCalendar loppupaiva;
	
	//Oletetaan, ett� viikonp�iv� on sama kuin alkup�iv�ll�
	public Tapahtuma (String nimi, String paikka, int tyyppi, int alkuaikaTunnit, int alkuaikaMinuutit, int alkupaiva, int alkukuu, int alkuvuosi, int loppuaikaTunnit, int loppuaikaMinuutit, int loppupaiva, int loppukuu, int loppuvuosi){
		this.nimi = nimi;
		this.paikka = paikka;
		if (tyyppi == LUENTO || tyyppi == HARJOITUS || tyyppi == TENTTI || tyyppi == OPINTOPIIRI || tyyppi == MUU)
			this.tyyppi = tyyppi;
		else
			this.tyyppi = MUU;
		
/*		if (kellonaika >= 0 && kellonaika < 24)
			this.kellonaika = kellonaika;
		else
			this.kellonaika = 0;
*/
		this.alkupaiva = new GregorianCalendar(alkuvuosi, alkukuu-1/*GregorianCalendarissa tammikuu = 0*/, alkupaiva, alkuaikaTunnit, alkuaikaMinuutit);
		this.loppupaiva = new GregorianCalendar(loppuvuosi, loppukuu-1, loppupaiva, loppuaikaTunnit, loppuaikaMinuutit);
	}
	
	public String getNimi(){
		return nimi;
	}
	
	public String getPaikka(){
		return paikka;
	}
	
	public int getTyyppi(){
		return tyyppi;
	}
	
	public String getPaiva(){
		int paiva = alkupaiva.get(Calendar.DAY_OF_WEEK);
		if (paiva == Calendar.MONDAY)
			return "Maanantai";
		if (paiva == Calendar.TUESDAY)
			return "Tiistai";
		if (paiva == Calendar.WEDNESDAY)
			return "Keskiviikko";
		if (paiva == Calendar.THURSDAY)
			return "Torstai";
		if (paiva == Calendar.FRIDAY)
			return "Perjantai";
		if (paiva == Calendar.SATURDAY)
			return "Lauantai";
		return "Sunnuntai";
	}
        public int getPaivaIndex(){
		int paiva = alkupaiva.get(Calendar.DAY_OF_WEEK);
		if (paiva == Calendar.MONDAY)
			return 0;
		if (paiva == Calendar.TUESDAY)
			return 1;
		if (paiva == Calendar.WEDNESDAY)
			return 2;
		if (paiva == Calendar.THURSDAY)
			return 3;
		if (paiva == Calendar.FRIDAY)
			return 4;
		if (paiva == Calendar.SATURDAY)
			return 5;
		return 6;
	}
	
/*	public int getKellonaika(){
		return kellonaika;
	}
*/
	
	public String getAlkupaiva(){
		return alkupaiva.get(Calendar.DAY_OF_MONTH) + "." + (alkupaiva.get(Calendar.MONTH) + 1) + "." + alkupaiva.get(Calendar.YEAR);
	}
	
	public String getLoppupaiva(){
		return loppupaiva.get(Calendar.DAY_OF_MONTH) + "." + (loppupaiva.get(Calendar.MONTH) + 1) + "." + loppupaiva.get(Calendar.YEAR);
	}
	
	public String getAlkuaika() {
		return alkupaiva.get(Calendar.HOUR_OF_DAY) + ":" + (alkupaiva.get(Calendar.MINUTE));
	}
	public int getAlkutunti() {
		return alkupaiva.get(Calendar.HOUR_OF_DAY);
	}

	public int getAlkuminuutti() {
		return alkupaiva.get(Calendar.MINUTE);
	}
	
        public int getLopputunti() {
		return loppupaiva.get(Calendar.HOUR_OF_DAY);
	}

	public String getLoppuaika() {
		return loppupaiva.get(Calendar.HOUR_OF_DAY) + ":" + (loppupaiva.get(Calendar.MINUTE));
	}
	
	public void printAlkuAika() {
		DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");
		System.out.print(dateFormat.format(alkupaiva.getTime()));
	}
	
	public void printLoppuAika() {
		DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");
		System.out.print(dateFormat.format(loppupaiva.getTime()));
	}
	
	public boolean onkoTanaan(GregorianCalendar paiva){
		if (alkupaiva.get(Calendar.DAY_OF_WEEK) != paiva.get(Calendar.DAY_OF_WEEK))
			return false;
		if (paiva.compareTo(alkupaiva) < 0 || paiva.compareTo(loppupaiva) > 0)
			return false;
		return true;
	}
	
	public int compareTo(Tapahtuma t){
		if (alkupaiva.get(Calendar.HOUR_OF_DAY) < t.getAlkutunti())
			return -1;
		if (alkupaiva.get(Calendar.HOUR_OF_DAY) > t.getAlkutunti())
			return 1;
		if (alkupaiva.get(Calendar.MINUTE) < t.getAlkuminuutti())
			return -1;
		if (alkupaiva.get(Calendar.MINUTE) > t.getAlkuminuutti())
			return -1;
		return 0;
	}
}
